home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-08-17 | 1.8 KB | 72 lines | [TEXT/PJMM] |
- unit MyHandles;
-
- interface
-
- type
- HandleArray = handle;
-
- function HandleArrayCreate (var h: HandleArray; size: longInt): OSErr;
- procedure HandleArrayDestroy (var h: HandleArray);
- function HandleArrayCount (h: HandleArray): longInt;
- function HandleArrayAppend (h: HandleArray; data: ptr): OSErr;
- procedure HandleArrayGet (h: HandleArray; index: longInt; data: ptr);
- procedure HandleArrayDelete (h: HandleArray; index: longInt);
- procedure HandleArrayReset (h: HandleArray);
-
- implementation
-
- uses
- MyAssertions, MyTypes;
-
- function HandleArrayCreate (var h: HandleArray; size: longInt): OSErr;
- var
- err: OSErr;
- begin
- h := NewHandle(SizeOf(longInt));
- err := MemError;
- if err = noErr then begin
- Assert(h <> nil);
- longIntH(h)^^ := size;
- end;
- HandleArrayCreate := err;
- end;
-
- procedure HandleArrayDestroy (var h: HandleArray);
- begin
- DisposeHandle(h);
- h := nil;
- end;
-
- procedure HandleArrayReset (h: HandleArray);
- begin
- Assert(h <> nil);
- SetHandleSize(h, SizeOf(longInt));
- end;
-
- function HandleArrayCount (h: HandleArray): longInt;
- begin
- Assert(h <> nil);
- HandleArrayCount := (GetHandleSize(h) - SizeOf(longInt)) div longIntH(h)^^;
- end;
-
- function HandleArrayAppend (h: HandleArray; data: ptr): OSErr;
- begin
- Assert(h <> nil);
- HandleArrayAppend := PtrAndHand(data, h, longIntH(h)^^);
- end;
-
- procedure HandleArrayGet (h: HandleArray; index: longInt; data: ptr);
- begin
- Assert((h <> nil) & (0 < index) & (index <= HandleArrayCount(h)));
- BlockMove(ptr(ord(h^) + SizeOf(longInt) + (index - 1) * longIntH(h)^^), data, longIntH(h)^^);
- end;
-
- procedure HandleArrayDelete (h: HandleArray; index: longInt);
- var
- err: longInt;
- begin
- Assert((h <> nil) & (0 < index) & (index <= HandleArrayCount(h)));
- err := Munger(h, SizeOf(longInt) + (index - 1) * longIntH(h)^^, nil, longIntH(h)^^, @h, 0);
- end;
-
- end.